का उपयोग करके सेगमेंटेशन गलती मैं कुछ एसएसई कोड में ओपनएमपी जोड़ने का प्रयोग शुरू कर रहा हूं।ओपनएमपी और एसएसई
मेरा पहला टेस्ट प्रोग्राम SOMETIMES _mm_set_ps में क्रैश हो जाता है, लेकिन जब मैं if (0) सेट करता हूं तो काम करता है।
यह इतना आसान लग रहा है कि मुझे कुछ स्पष्ट याद आना चाहिए। मैं जीसीसी के साथ संकलन कर रहा हूँ -fopenmp जी मार्च = core2 -pthreads
#include <stdio.h>
#include <stdlib.h>
#include <immintrin.h>
int main()
{
#pragma omp parallel if (1)
{
#pragma omp sections
{
#pragma omp section
{
__m128 x1 = _mm_set_ps (1.1f, 2.1f, 3.1f, 4.1f);
}
#pragma omp section
{
__m128 x2 = _mm_set_ps (1.2f, 2.2f, 3.2f, 4.2f);
}
} // end omp sections
} //end omp parallel
return 0;
}
का उपयोग कर -स्टास्टाइनलाइन ने इस मुद्दे को हल किया है। और यदि कोई प्रदर्शन जुर्माना है, तो यह अभी भी प्रदर्शन से बेहतर है! मैं देखता हूं कि यह कुछ और जटिल कोड के साथ कैसे जाता है। आपकी सहायता के लिए धन्यवाद. दुर्भाग्य से, मेरे पास खेलने के लिए 64-बिट मशीन नहीं है। मेरे पास एक एवीएक्स पीसी है, इसलिए यह एक शर्म की बात है कि जीसीसी अभी तक इसका समर्थन नहीं करता है। –
सटीक होने के लिए, जीसीसी कोर i7 2 जीन (सैंडी ब्रिज) समेत एवीएक्स का समर्थन करता है, और जो मैंने ऑनलाइन पढ़ा है, वह लिनक्स पर बहुत अच्छा काम करता है। लेकिन मुझे MinGW64 के साथ विंडोज़ पर बहुत से सेगमेंटेशन गलती की समस्याएं आई हैं, इसलिए शायद यह एक मिनीजीडब्लू संबंधित बग होगा। लेकिन मैं बस कुछ गलत कर रहा हूं ... –
जी ++ विकल्प '-mstackrealign' पूरी तरह से काम किया। वैकल्पिक रूप से, मेरे मामले में मुझे यह सुनिश्चित करने के लिए 'नोलाइनलाइन' विशेषता भी जोड़नी पड़ी कि फ़ंक्शन कॉल पहले स्थान पर था: '__attribute __ ((force_align_arg_pointer, noinline))' – phfaist