我一直在寻找一段时间,但似乎无法在文档或SO上找到任何有用的东西.这个问题并没有真正帮助我,因为它引用了修改程序集,我用C语言写作.
我有一些代码进行间接访问,我想要进行矢量化.
for (i = 0; i < LENGTH; ++i) {
foo[bar[i]] *= 2;
}
Run Code Online (Sandbox Code Playgroud)
由于我有索引我想要加倍内部bar,我想知道是否有办法将这些索引加载foo到矢量寄存器然后我可以应用我的数学并将其存储回相同的索引.
像下面这样的东西.该load和store说明我只是做了,因为我找不到AVX和SSE文档中像他们一样东西.我想我读过AVX2有类似功能的地方,但我正在使用的处理器不支持AVX2.
for (i = 0; i < LENGTH; i += 8) {
// For simplicity, I'm leaving out any pointer type casting
__m256 ymm0 = _mm256_load_indirect(bar+i);
__m256 ymm1 = _mm256_set1_epi32(2); // Set up vector of just 2's
__m256 ymm2 = _mm256_mul_ps(ymm0, ymm1);
_mm256_store_indirect(ymm2, bar+i);
}
Run Code Online (Sandbox Code Playgroud)
在AVX或SSE中是否有任何指令允许我从不同的数组加载带有索引数组的向量寄存器?如果没有明确的功能,还是围绕它的任何"hacky"方式?
在我使用ifstream从文件中读取一行之后,有没有办法将流重新带回到我刚读过的行的开头?
using namespace std;
//Some code here
ifstream ifs(filename);
string line;
while(ifs >> line)
{
//Some code here related to the line I just read
if(someCondition == true)
{
//Go back to the beginning of the line just read
}
//More code here
}
Run Code Online (Sandbox Code Playgroud)
因此,如果someCondition为true,则在下一个while循环迭代期间读取的下一行将是我刚才读到的同一行.否则,下一个while循环迭代将在文件中使用以下行.如果您需要进一步澄清,请不要犹豫.提前致谢!
更新#1
所以我尝试了以下方法:
while(ifs >> line)
{
//Some code here related to the line I just read
int place = ifs.tellg();
if(someCondition == true)
{
//Go back to the beginning of the line just read
ifs.seekg(place); …Run Code Online (Sandbox Code Playgroud) 我正在使用第三方API,该API似乎返回的数据已带有实体代码。如The Lion’s Pride。
如果我从API中按原样打印字符串,则它在浏览器中的显示效果就很好(在上面的示例中,它将放在撇号中)。但是,我不能相信,API将始终使用实体在未来,所以我想使用类似htmlentities或htmlspecialchars之前,我打印自己。这样做的问题是它将再次在实体代码中对“&”号进行编码,并且最终结果将出现The Lion&#8217;s Pride在HTML源代码中,而HTML源代码不会呈现任何用户友好的内容。
如何使用htmlentities或htmlspecialchars仅在尚未在字符串上使用它的情况下?是否有内置方法来检测字符串中是否已经存在实体?