小编Mys*_*ial的帖子

如何使用__m128i执行元素左移?

我发现的SSE转换指令只能在所有元素上移动相同的量:

  • _mm_sll_epi32()
  • _mm_slli_epi32()

这些移动所有元素,但移动量相同.

有没有办法对不同的元素应用不同的转换?像这样的东西:

__m128i a,  __m128i b;  

r0:=    a0  <<  b0;
r1:=    a1  <<  b1;
r2:=    a2  <<  b2;
r3:=    a3  <<  b3;
Run Code Online (Sandbox Code Playgroud)

c sse avx

4
推荐指数
1
解决办法
1375
查看次数

堆上的内存地址是否可以重用?

标题问题的进一步解释是有序的,让我解释一下我的情景.

我有一个列表容器,指向堆上的几个对象.无论何时创建新对象,都会将指向它的指针添加到列表中,并且每当删除对象时,其指针都将被删除.可以肯定地说,此列表上的所有指针始终有效.

列表中的许多对象包含指向同一列表中其他对象的指针.

在我取消引用任何指针之前,我想使用一个CheckAgainstList(ptr*)函数来确保一个对象指向同一列表中的另一个对象,因此不指向已被删除的对象.

现在就拿你的锡箔帽,这可能吗?

  1. 对象A有一个指向对象B的指针,其内存地址为 0x00988e50.
  2. 对象B已删除.
  3. 创建对象C并将其放入新释放的存储空间中0x00988e50.
  4. CheckAgainstList(ptr*) 当我们检查指针时返回true,因为对象C在列表中并且在用于占用的相同内存地址B中.

现在我们有一个bug,因为A认为它有一个指向B的指针,但是B已经消失了,C已经取而代之.

这个潜在的错误甚至可能吗?

c++ memory

4
推荐指数
2
解决办法
564
查看次数

如何在__m128中找到最大成员(F32vec4)

像这样的东西:

_declspec(align(16)) float dens[4];

//Here the code comes. F32vec4 S_START, Pos, _Vector

*((__m128*)dens) = (S_START - Pos) *_Vector;

float steps = max(max(dens[3], dens[2]), max(dens[1], dens[0]));
Run Code Online (Sandbox Code Playgroud)

如何使用SSE直接执行此操作?

c sse simd

4
推荐指数
1
解决办法
394
查看次数

使用gcc编译器隐式int和隐式声明函数

我读了c99标准:

-remove implicit function declaration,

-remove implicit int.
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用-pedantic在c99模式下使用gcc编译器编译此代码时

main(void){
    f(3);
    return 0;
}


int f(int a){
    ....
}
Run Code Online (Sandbox Code Playgroud)

我期待2个错误,但我只收到2个警告:

-warning: return type defaults to ‘int’

-warning: implicit declaration of function ‘f’.
Run Code Online (Sandbox Code Playgroud)

它们不应该是c99中的错误吗?

http://gcc.gnu.org/c99status.html 在这两种情况下都写了"完成".

谢谢.

c c99

4
推荐指数
1
解决办法
2220
查看次数

OpenMP和C++并行for循环:为什么我的代码在使用OpenMP时会变慢?

我有一个关于使用OpenMP(使用C++)的简单问题,我希望有人可以帮助我.我在下面添加了一个小例子来说明我的问题.

#include<iostream>
#include<vector>
#include<ctime>
#include<omp.h>

using namespace std;

int main(){
  srand(time(NULL));//Seed random number generator                                                                               

  vector<int>v;//Create vector to hold random numbers in interval [0,9]                                                                                   
  vector<int>d(10,0);//Vector to hold counts of each integer initialized to 0                                                                    

  for(int i=0;i<1e9;++i)
    v.push_back(rand()%10);//Push back random numbers [0,9]                                                                      

  clock_t c=clock();

  #pragma omp parallel for
  for(int i=0;i<v.size();++i)
    d[v[i]]+=1;//Count number stored at v[i]                                                                                     

  cout<<"Seconds: "<<(clock()-c)/CLOCKS_PER_SEC<<endl;

  for(vector<int>::iterator i=d.begin();i!=d.end();++i)
  cout<<*i<<endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码创建了一个v包含该范围内10亿个随机整数的向量[0,9].然后,代码循环v计算每个不同整数的实例数(即,在v中找到多少个,有多少两个,等等)

每次遇到特定的整数时,都会通过递增向量的适当元素来计算d.因此,d[0]计算多少个零,d[6]计算多少六个,依此类推.到目前为止有道理吗?

我的问题是当我尝试使计数循环并行时.如果没有#pragma OpenMP …

c++ parallel-processing performance openmp

4
推荐指数
1
解决办法
7912
查看次数

C中基本数据类型的大小

我有一个示例程序,我从一些网站复制.

int main(void)
{
   int answer;
   short x = 1;
   long y = 2;
   float u = 3.0;
   double v = 4.4;
   long double w = 5.54;
   char c = 'p';

   typedef enum
   {
      kAttributeInvalid,
      kBooleanAttributeActive,
      kBooleanAttributeAlarmSignal,
      kBooleanAttributeAlign64,
      kBooleanAttributeAutoNegotiationComplete,
   }codes_t;

  /* __DATE__, __TIME__, __FILE__, __LINE__ are predefined symbols */
  #if 0
  printf("Date : %s\n", __DATE__);
  printf("Time : %s\n", __TIME__);
  printf("File : %s\n", __FILE__);
  printf("Line : %d\n", __LINE__);
  #endif

  /* The size of various types */
  printf("The size of int         %zu\n", …
Run Code Online (Sandbox Code Playgroud)

c types

4
推荐指数
1
解决办法
2万
查看次数

致命错误C1083:无法打开包含文件:'iostream':没有这样的文件或目录

我已经多次重新安装Visual Studio 2010 Professional以尝试使其工作.我不得不卸载Visual Studio 2012 Professional,因为它没有编译我们在课堂上做的事情.

我完全卸载了包括SQL Server在内的所有东西.

我去了VC/include,iostream头文件不存在.

#include <iostream>

int main () {

cout << "hello";

system ("PAUSE");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这就是我正在努力做的事情,因为没有别的办法.

它真的让我发疯,因为我需要让它工作,以便我可以做我的项目!

我每次都这样做; new project => empty project =>将一个项添加到source => .cpp

我正在运行Windows 8.

它只是说Error无法打开源文件另外,错误cout标识符是未定义的....

我想知道我是否应该进行系统还原?或者,如果我应该从恢复媒体中完全重新安装Windows 8?

c++ windows iostream include visual-studio-2010

4
推荐指数
1
解决办法
2万
查看次数

将数据放入SIMD寄存器需要多少个周期?

我是学习x86和ARM架构的学生.

我想知道将多个数据放入SIMD寄存器需要多少个周期?

据我所知,x86 SSE的xmms寄存器具有128位大小的寄存器.

如果我想通过SIMD指令集和汇编语言将32位8位数据从堆栈中放入xmms寄存器中,

对于通用寄存器的PUSH/POP,它具有相同的循环时间吗?

或者每8位数据需要32倍的时间吗?

感谢您的关注和关注!

x86 sse simd

4
推荐指数
1
解决办法
948
查看次数

为什么--x; work和x--给出了递归代码中的seg错误

这段代码给了我一个seg错误,但当我改变它时x--,--x它打印正确.

他们不一样????

int main()
{    
    myFunc(5); 
    return 0;
}

void myFunc (int x) {  
    if (x > 0) {
        myFunc(x--);
        printf("%d, ", x);
    }
    else
        return;
}
Run Code Online (Sandbox Code Playgroud)

c recursion segmentation-fault

3
推荐指数
2
解决办法
266
查看次数

为什么数组比矢量快得多?

这是将矢量与数组进行比较的公平测试吗?速度的差异似乎太大了.我的测试表明阵列的速度要快10到100倍!

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <windows.h>
#include <stdint.h>

using namespace std;

double PCFreq = 0.0;
__int64 CounterStart = 0;

using namespace std;

void StartCounter()
{
    LARGE_INTEGER li;
    if(!QueryPerformanceFrequency(&li))
    std:cout << "QueryPerformanceFrequency failed!\n";

    PCFreq = double(li.QuadPart)/1000000000;

    QueryPerformanceCounter(&li);
    CounterStart = li.QuadPart;
}
double GetCounter()
{
    LARGE_INTEGER li;
    QueryPerformanceCounter(&li);
    return double(li.QuadPart-CounterStart)/PCFreq;
}

int _tmain(int argc, _TCHAR* argv[])
{
    //Can do 100,000 but not 1,000,000
    const int vectorsize = 100000;
    cout.precision(10);

    StartCounter();
    vector<int> test1(vectorsize);
    for(int i=0; i<vectorsize; i++){
        test1[i] = 5; …
Run Code Online (Sandbox Code Playgroud)

c++ arrays performance vector

3
推荐指数
1
解决办法
642
查看次数