Ich versuche OpenMP in einigen C-Code zu implementieren, den ich von R anrufe. Im Moment benutze ich ein Testprogramm, um zu sehen, wie viele Threads ich habe, aber ich kann nicht mehr als einen Thread bekommen. Wie kann ich mehr als einen Thread erhalten, wenn dieses Programm ausgeführt wird?Wie kompiliere ich C-Code mit R CMD SHLIB, um OpenMP zu verwenden?
Hier sind die Inhalte von test_omp.c:
#ifdef _OPENMP
#include <omp.h>
#endif
#include <stdio.h>
#include <R.h>
void test_omp(){
int num_threads=-1;
#ifdef _OPENMP
printf("We have Open MP!\n");
omp_set_num_threads(2);
num_threads = omp_get_num_threads();
#else
printf(":(\n");
#endif
printf("Number of OpenMP threads: %d\n",num_threads);
}
ich dann kompilieren dies das Shell-Skript:
#!/bin/bash
export OMP_NUM_THREADS=2
export PKG_CFLAGS="-fopenmp"
export PKG_LIBS="-lgomp"
R CMD SHLIB test_omp.c
ich den folgenden Code in R dann laufen
dyn.load("test_omp.so")
.C("test_omp")
und ich bekomme folgende Ausgabe:
We have Open MP!
Number of OpenMP threads: 1
Ich erwarte 2 Fäden, aber ich bekomme nur einen. Wie kann ich mehr als einen Thread bekommen?
was meinst du 'wie viele Threads ich habe '? Zu der Zeit, dieses Programm läuft - es hat 1 Thread, wenn Sie mehr erstellen - Sie haben mehr –
@llya Bursov - Ich weiß, ich habe einen Thread zur Laufzeit - das ist das Problem. Um openMP effektiv zu betreiben, muss ich mehr als eins haben. Wie würde ich mehr schaffen? – Rich
Wie haben Sie überhaupt versucht, ein Handbuch zu lesen? versuchen Sie dieses Beispiel https://msdn.microsoft.com/en-us/library/xdeb73hc.aspx zuerst –